#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/mman.h>
#include<sys/wait.h>
#include<unistd.h>
#include<fcntl.h>

int main()
{
	//打开文件
	int fd = open("./fifo2IPC.c",O_RDWR);
	if(fd<0)
	{
		perror("open error");
		exit(-1);
	}

	int len = lseek(fd,0,SEEK_END);

	//使用mmap建立共享映射区
	void *addr = mmap(NULL,len,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
	
	
	if(addr == MAP_FAILED)
	{
		perror("mmap error");
		exit(-1);
	}

	close(fd);//映射成功后可以立即关闭内存

	//创建进程
	int pid = fork();
	if(pid<0)
	{
		perror("fork error");
		exit(1);
	}
	else if(pid>0)//父进程
	{
		memcpy(addr,"hello world",strlen("hello world"));
		wait(NULL);
	}
	else if(pid == 0)
	{
		char buf[1024];
		memset(buf,0,sizeof(buf));
		memcpy(buf,addr,sizeof(buf));
		printf("buf==[%s]\n",buf);
	}

	return 0;
}
